// 路由
import router from '@/router';
// 进度条
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
// 获取token
import { getToken } from '@/utils/cookie';
import { TokenKey } from '@/utils/cookie/tokenKey';
import queryDictionaryList from '@/store/dictionary';
import { usePermissionStore } from '@store/modules/permission';
import { useUserStore } from '@store/modules/user';
import { useSystemStore } from '@/store/modules/system';

// 进度条配置
NProgress.configure({ showSpinner: false });
// 白名单
const whiteList = ['/login', '/register', '/retrieve'];

router.beforeEach((to, _from, next) => {
    // 开始进度条
    NProgress.start();
    // 判断是否登录 (online的token是否过期 且 id是否为空)
    if (getToken(TokenKey.online) === 'true' && useUserStore().id !== '') {
        // 检查动态路由是否存在
        const usePermission = usePermissionStore();
        if (usePermission.sidebarRouters.length == 0) {
            // 动态路由为空时才去加载
            usePermissionStore()
                .generateRoutes()
                .then((res) => {
                    if (!res) return false;
                    // 加载字典
                    queryDictionaryList();
                    // 加载系统配置
                    useSystemStore().getSystemConfigEvent();
                    // 刷新路由
                    next({ ...to, replace: true });
                });
        } else {
            // 存在动态路由，直接跳转
            next();
        }
    } else {
        // 没有登录
        if (whiteList.indexOf(to.path) !== -1) {
            // 在免登录白名单，直接进入
            next();
        } else {
            // 否则全部重定向到登录页
            next(`/login?redirect=${to.fullPath}`);
            // 结束进度条
            NProgress.done();
        }
    }
});

router.afterEach(() => {
    // 结束进度条
    NProgress.done();
});
